package main

import "fmt"

func main() {
  const a int = 123 //常量定义时必须赋值
  fmt.Printf("a=%d\n",a) //a=123

  //==============================
  const (
    b = "hello"
    c = true
  )

  fmt.Println(b,c) //hello true


  //==============================
  const (
    d int = 100
    e //这里不指定就和上面离他最近的那个显示赋值了的同值
    f int = 200
    g
  )
  fmt.Printf("d=%d e=%d f=%d g=%d\n",d,e,f,g) //d=100 e=100 f=200 g=200


  //==============================
/*
iota
美: [aɪ'oʊtə]
英: [aɪ'əʊtə]
n.	微量；极少量；希腊字母表的第 9 个字母
网络	微小；一点；极微小
*/
  const (
    h = iota //←只能用在const里, 这里就相当于从0开始递增
    i
    j
  )
  fmt.Printf("h=%d i=%d j=%d\n",h,i,j) //h=0 i=1 j=2


  //==============================
  const (
    k = 1 << iota //1 左移 iota(此时为0)
    l //没写 表达式就和上面一样; 此时iota为1
    m //没写 表达式就和上面一样; 此时iota为2
  )
  fmt.Printf("k=%d l=%d m=%d\n",k,l,m) //k=1 l=2 m=4


  //==============================
  //iota只和行有关, 第几行iota就是几
  const (
    A = iota
    B = iota
    C
    D = 8
    E
    F = iota
    G
  )
  fmt.Printf("A=%d B=%d C=%d C=%d E=%d F=%d G=%d\n",A,B,C,D,E,F,G) //A=0 B=1 C=2 C=8 E=8 F=5 G=6
  //iota递增是在一个const()里
  //新起一个const 就会清零
  const (
    A1 = iota
    A2
  )
  fmt.Printf("A1=%d A2=%d\n",A1,A2) //A1=0 A2=1

}
